package com.common.base.utils

import android.app.Activity
import com.common.base.app.extras.yes
import java.util.*

/**
 *
 * 作者：sosou
 *
 * 版本：1.0
 *
 * 创建日期：6/2/2023
 *
 * 描述：用于管理所有的活动的类
 *
 * 修订历史：
 *
 */
object ActivityCollector {
    /**
     * 创建一个用于存放所有activity的list集合
     */
    private var activityStack: Stack<Activity?> = Stack()

    /**
     * 单一实例
     */
    var instance: ActivityCollector? = null
        get() {
            if (null == field) {
                synchronized(ActivityCollector::class.java) {
                    if (null == field) {
                        field = ActivityCollector
                    }
                }
            }
            return field
        }
        private set

    /**
     * [简要描述]:将活动添加到list集合中<br></br>
     * [详细描述]:将活动添加到list集合中<br></br>
     *
     * @param activity 活动
     */
    fun addActivity(activity: Activity?) {
        activityStack.add(activity)
    }

    /**
     * [简要描述]:将活动从list集合中移除<br></br>
     * [详细描述]:将活动从list集合中移除<br></br>
     *
     * @param activity 活动
     */
    fun removeActivity(activity: Activity?) {
        activityStack.remove(activity)
    }

    /**
     * [简要描述]:关闭所有的活动<br></br>
     * [详细描述]:遍历集合list中所有活动，如果没有关闭就关闭掉<br></br>
     */
    fun finishAll() {
        var i = 0
        val size = activityStack.size
        while (i < size) {
            if (null != activityStack[i]) {
                activityStack[i]?.finish()
            }
            i++
        }
        activityStack.clear()
    }

    /**
     * [简要描述]:关闭页面
     * [详细描述]:关闭页面
     */
    fun finishActivity(clazz: Class<*>) {
        for (activity in activityStack) {
            // 如果活动没有关闭就关闭掉
            if (activity != null) {
                if (!activity.isFinishing && activity.javaClass == clazz) {
                    activity.finish()
                }
            }
        }
    }

    /**
     * [简要描述]:如果当前页面不是首页IndexActivity,就关闭所有页面<br></br>
     * [详细描述]:如果当前页面不是首页IndexActivity,就关闭所有页面<br></br>
     */
    fun finishAllNotIndex(clazz: Class<*>) {
        for (activity in activityStack) {
            // 如果活动没有关闭就关闭掉
            if (activity != null) {
                if (!activity.isFinishing
                    && activity.javaClass != clazz
                    && !activity.localClassName.contains(clazz.name)
                ) {
                    activity.finish()
                }
            }
        }
    }

    /**
     * [简要描述]:如果当前页面不是首页IndexActivity,就关闭所有页面<br></br>
     * [详细描述]:如果当前页面不是首页IndexActivity,就关闭所有页面<br></br>
     */
    fun finishAllNotIndex() {
        for (activity in activityStack) {
            // 如果活动没有关闭就关闭掉
            if (activity != null) {
                if (!activity.isFinishing && !activity.localClassName.contains(".MainActivity")) {
                    activity.finish()
                }
            }
        }
    }

    /**
     * [简要描述]:如果当前页面不是首页IndexActivity,就关闭所有页面<br></br>
     * [详细描述]:如果当前页面不是首页IndexActivity,就关闭所有页面<br></br>
     */
    fun finishAllNotLogin() {
        for (activity in activityStack) {
            // 如果活动没有关闭就关闭掉
            if (activity != null) {
                if (!activity.isFinishing && !activity.localClassName.contains("LoginActivity")) {
                    activity.finish()
                }
            }
        }
    }

    /**
     * 获取当前Activity（堆栈中最后一个压入的）
     */
    fun currentActivity(): Activity? {
        return activityStack.lastElement()
    }

    /**
     * 检查页面是否已存在
     */
    fun checkHasActivity(clazz: String): Boolean {
        clazz.isNullOrEmpty().yes {
            return false
        }
        for (activity in activityStack) {
            // 如果活动没有关闭就关闭掉
            if (activity != null) {
                if (activity.localClassName.contains(clazz)) {
                    return true
                }
            }
        }
        return false
    }
}